#include "AutoLock.h"

using namespace sukai::thread;

AutoLock::AutoLock(Mutex* mutex)
{
    m_mutex = mutex;
  //  m_mutex->lock();
}
/*
 * "lock"
 * "try_lock"
 */
AutoLock::AutoLock(Mutex* mutex,std::string type)
{
    m_mutex = mutex;
    if (type=="lock") {

        m_mutex->lock();
    }else if(type=="try_lock") {

        m_mutex->try_lock();
    }else {

        std::cout << "AutoLock::AutoLock(Mutex* mutex,std::string type) type error : " <<type<< std::endl;
    }

}



int AutoLock::lock()
{
    return m_mutex->lock();
}



int AutoLock::try_lock()
{
    return m_mutex->try_lock();
}

int AutoLock::unlock()
{
    return m_mutex->unlock();
}


AutoLock::~AutoLock()
{
    m_mutex->unlock();
}

//使用： 自动解锁
//Mutex m_mutex;
//AutoLock lock(&m_mutex);

/**
#include <../yazi-web/thread/mutex.h>

using namespace yazi::thread;
Mutex m_mutex;

void ThreadPool::create(int threads)
{
    AutoLock lock(&m_mutex);
    m_threads = threads;
    for (int i = 0; i < threads; i++)
    {
        Thread* thread = new WorkerThread();
        log_debug("create thread %x", thread);
        m_pool.push_back(thread);
        thread->start();
    }
}

 //================================================

 #include "AutoLock.h"
#include "mutex.h"
sukai::thread::Mutex test_mutex1_;

 //        sukai::thread::AutoLock lock(&test_mutex1_);
//        int aaa=    lock.try_lock();
//        std::cout<<"11111111111111111111111111lock.try_lock()" <<aaa<<std::endl;
//        if(aaa==1){
//            std::cout<<"11111111111111111111111111lock.try_lock()" <<std::endl;
//
//
//            return;
//        }else if(aaa==0){
//            std::cout<<"2222222222222222222.try_lock()" <<std::endl;
//            std::this_thread::sleep_for(std::chrono::milliseconds(3000));
//            return;
//        }


*/